#ifndef HTTPMGR_H
#define HTTPMGR_H
#include "singleton.h"
#include <QString>
#include <QUrl>         // 路由
#include <QObject>
#include <QNetworkAccessManager>  // QT原生的网络管理类
#include <QJsonObject>    // 序列化
#include <QJsonDocument>  // 反序列化


// CRTP使用
class HttpMgr:public QObject, public Singleton<HttpMgr>,
                public std::enable_shared_from_this<HttpMgr>
{
    Q_OBJECT
public:
    ~HttpMgr();
    /*
    * 语法解析：为什么析构要置为公有 (模板的派生类析构)
    * Singleton进行析构的时候，会调用share_ptr的析构，又因为是模版类，所以会调用模板T的析构，也就是HttpMgr的析构
    * 因此要把析构函数放在公有，让外面的调用
    */
private:
    friend class Singleton<HttpMgr>;
    HttpMgr();
    QNetworkAccessManager _manager;
    // 发送函数
    void PostHttpReq(QUrl url, QJsonObject json, ReqId req_id, Modules mod);
    // 槽函数
private slots:
    void slot_http_finish(ReqId id, QString res, ErrorCodes err, Modules mod);
signals:
    void sig_http_finish(ReqId id, QString res, ErrorCodes err, Modules mod);
    // 谁发的就在哪定义
    void sig_reg_mod_finish(ReqId id, QString res, ErrorCodes err);
};

#endif // HTTPMGR_H
